\chapter{Východiská}

\label{kap:vychodiska} % id kapitoly pre prikaz ref

V prvej kapitole si prejdeme prehľad informácií z oblasti tvorby softvéru pre žiakov so zrakovým postihnutím. Kapitola je rozdelená do piatich častí.
\newline
V prvej časti si kategorizujeme druhy zrakového postihnutia a ozrejmíme, na ktorú kategóriu žiakov sa zameriame. 
\newline
Druhá časť nám poskytne prehľad pomôcok, ktoré používajú nevidiaci pri práci s počítačom.
\newline
Tretia časť je venovaná prehľadu už existujúcich programovacích prostredí pre nevidiacich, pričom sa budeme venovať rozdielne zameraným programom, od softvéru pre deti až po doplnky pre pokročilých vývojárov.
\newline
V štvrtej časti bližšie popíšeme technológie, ktoré využijeme pri vývoji nášho prostredia, aby čo najlepšie pokrylo požiadavky používateľov.
\newline
V poslednej časti si vysvetlíme rozdiel medzi kompilátorom a interpretrom a vyberieme, ktorý spôsob spracovania kódu budeme používať v našej práci.

\section{Kategorizácia osôb so zrakovým postihnutím}
V literatúre možno nájsť rôzne kategorizácie osôb so zrakovým postihnutím. Keďže vytvárame sofotvér pre žiakov základnej školy, dôležitý je aspekt prijímania informácií vo vzdelávaní. Preto uvádzame kategorizáciu pochádzajucu z oblasti špeciálnej pedagogiky. 
\newline V špeciálnej pedagogike delíme žiakov so zrakovým postihnutím do štyroch skupín
 \cite{lopuchova}:

\begin{itemize}
\item \textbf{Nevidiaci -} nie sú schopní vnímať okolitý svet zrakom, vytvárať vizuálne vnemy a predstavy, čo spôsobuje horšiu priestorovú orientáciu a mobilitu. 
\item \textbf{Čiastočne vidiaci -} vidia v obmedzenej miere a nie sú schopní orientovať sa podľa zraku. 
\item \textbf{Slabozrakí -} majú zníženú zrakovú ostrosť a zníženú schopnosť zrakového vnímania, čo sa prejavuje znížením rýchlosti a presnosti zrakvého vnímania a rýchlejšou únavou pri zrakovej práci.
\item \textbf{Žiaci s poruchami binokulárneho videnia -} poruchy videnia za vzájomnej spolupráce oboch očí.
\end{itemize}
Programovacie prostredie, ktoré sme vytvorili je určené pre nevidiacich žiakov a je prispôsobené ich špecifickým potrebám pre prácu s počítačom. 


\section{Tvorba softvéru pre žiakov so zrakovým postihnutím}
Aby bol náš softvér prístupný pre nevidiacich žiakov, musíme pri jeho tvorbe myslieť na niekoľko hlavných princípov: \cite{VisualDisabilities}:
\begin{itemize}
\item Vizuálne informácie, ako sú grafika, farby či rozloženie elementov, používateľ nie je schopný vnímať.
\item Namiesto myši budú používateľia na navigáciu a ovládanie softvéru používať klávesnicu.
\item Technológie musia byť kompatibilné s asistenčnými technológiami.
\end{itemize}


\subsection{Asistenčné technológie}
Používatelia elektornických zariadení dostávajú výstup zväčša vo vizuálnej podobe, preto je potrebné, aby mali ľudia so zrakovým postihnutím na interakciu so zariadeniami rôzne pomôcky. V tejto časti sa pozrieme na najpoužívanejšie technológie, ktoré pomôžu nevidiacim pri práci s počítačom.

\subsubsection{Čítač obrazovky}
Čítač obrazovky \cite{VisualDisabilities} je základnou asistenčnou technológiou pre nevidiacich a slabozrakých používateľov pri práci s počítačom. Je to softvér, ktorý transformuje textový a obrazový obsah aplikácie alebo webovej stránky na syntetizovanú reč. Hoci čítač obrazovky nedokáže plnohodnotne replikovať vizuálny obsah, pretože nedokáže analyzovať obrázky, ako vývojari môžme tomuto nedostatku pomôcť tým, že pridáme obrázkom alternatívny text. 
\newline
\newline
Väčšina čítačov transformuje obsah obrazovky do zvukovej podoby, ale existujú aj čítače, ktoré zobrazujú údaje prostredníctvom Braillovho displeja.

\subsubsection{Braillov displej}
Obnoviteľný Braillov displej \cite{techopedia} (obrázok 1.1) je zariadenie zobrazujúce text v podobe Braillovho písma. Používateľ číta text hmatom. Výhodou tohto zariadenia je, že narozdiel od syntetizéra reči ho môžu používať nepočujúci aj nevidiaci ľudia. 
\newline
Žiaľ, narozdiel od softvéru na čítanie obrazovky sú tieto zariadenia veľmi drahé a nie každý si ich môže finančne dovoliť.

\begin{figure}[H]
\centering
\includegraphics[height=5cm]{brailleDisplay}
\caption{Braillov displej}
\vspace{1cm}
\end{figure}

\section{Existujúce programovacie prostredia pre nevidiacich}
Ako sme už spomínali v úvode, vhodných programovacích prostredí pre nevidiacich žiakov je nedostatok. 
\newline
V tejto časti sa pozrieme na niekoľko existujúcich nástrojov, ktoré pomáhajú začiatočníkom  získať prvé skúsenosti, ale aj pokročilejšie zručnosti v oblasti programovania.

\subsection{APL: Zvukový programovací jazyk pre nevidiacich}
APL (Audio Programming Language for Blind Leaners) \cite{APL} je zvukový programovací jazyk navrhnutý špeciálne pre nevidiacich študentov. Je založený na zvukovom rozhraní, čím podporuje začínajucich nevidiacich študentov, aby mohli rozvíjať a precvičovať svoje zručnosti v riešení algoritmických problémov. APL sa teda nepovažuje za alternatívu ku konvenčným programovacím jazykom, ale len za nástroj, ktorý pomáha pri lepšej integrácii nevidiacih programátorov. Bol vyvinutý v Jave a používa FreeTTS Java speech synthesizer. 
\newline
Autori testovali použiteľnosť tohto jazyka počas implementácie aj po jej skončení a výsledky ukázali, že APL motivoval nevidiacich študentov strednej školy k písaniu programov a ďalšiemu rozvoju zručností. 
\newline
Naše prostredie sa bude od APL líšiť v tom, že príkazy jazyka budú po slovensky, tým pádom budú pre deti intuitívnejšie a ľahšie pochopia ich funkcionalitu.

\subsection{CodeTalk}
CodeTalk \cite{CodeTalk} je doplnok pre nevidiacich implementovaný v programovacom prostredí Visual Studio. Tvorcovia sa zamerali na výzvy, ktorým nevidiaci čelia v programovacích prostrediach založených na grafickom rozhraní. Extrahuje informácie súvisiace s kontextom a umožní vývojarovi prístup so zníženým úsilím. 
\newline
Funkcie, ktoré sú v CodeTalk implementované:
\begin{itemize}
\item Po otvorení súboru sa používateľovi spraví zhrnutie kódu - informácie o triedach a funkciách v súbore zhrnie do prístupného stromovo usporiadaného prehľadu. Vývojár používajúci čítač obrazovky si ho môže prejsť a pochopiť tak štruktúru kódu.
\item V prípade potreby vie čítač povedať kontext aktuálneho riadku, triedy a menný priestor, ku ktorému riadok patrí.
\item Informácie o chybe sa programátor dozvie namiesto červeno vyznačeného riadku pomocou proaktívnych tónov chýb.
\item Umožňuje zvukové debuggovanie.
\end{itemize}
Nevidiaci programátori sa vyjadrili, že netušili koľko informácií vidiaci programátori dostávajú, pretože im ich nikdy čítač obrazovky toľko neposkytol. Celkové hodnotenie tohto doplnku bolo v priemere 8,8 z 10, čo je vysoká úspešnosť a zjednodušenie života mnohým zrakovo postihnutým používateľom Visual Studia. 


\subsection{Code Jumper}
Code Jumper \cite{CodeJumper} (obázok 1.2) je fyzický programovací jazyk určený najmä pre deti vo veku 7-11 rokov. Prostrdie bolo vytvorené pre deti so zrakovým postihnutí, bez ohľadu na úroveň zraku. Prostredie je zložené z hardvérovej a softvérovej časti.
\newline
Hardvérová časť sa skladá z fyzických blokov, reprezentujúcich príkazy na prehratie hudby, príkaz pauzy, cyklu a podmienky. Každý blok má niekoľko konektorov a káblov, čo umožňuje spájanie blokov, ich prepojenie a definovanie štruktúry programu. Bloky sa zapájajú do konektorov na hlavnej jednotke(Hube), ktorá predstavuje logický východiskový bod. Bloky príkazov boli navrhnuté tak, aby boli hmatovo aj vizuálne odlišné. Majú svoje otáčacie tlačidlá na nastavenie parametrov. Taktiež sa dajú do nich vložiť zásuvné bloky reprezentujúce konštanty, náhodné čísla, nekonečno, pripočítanie a zníženie počítadla a premenné.
\newline
Prostredie bolo navrhnuté tak, aby bolo vhodné aj pre mladšie deti (7 rokov), ktoré začnú s jednoduchými programami a naučia sa čo je postupnosť príkazov. Zároveň prostredie poskytuje dostatočný rozsah na rozvíjanie znalostí a konštruovanie vnorených cyklov a podmienok aj pre staršie deti (11 rokov).
\newline
Vytvorený program sa zapisuje do textovej podoby(kódu) cez softvérovú časť. Textovú podobu si môžu žiaci vypočuť cez tlačidlo prehrávania na hlavnej jednotke alebo pomocou asistenčných technológií v aplikácii.
\newline
Nakoľko je možné, aby žiaci pracovali iba s fyzickými blokmi prostredia, môžu sa vďaka nemu učiť programovacie konštrukcie aj žiaci, ktorí nevedia pracovať s počítačom. Na druhej strane môžme povedať, že hoci budú mať žiaci základné znalosti z programovania, ale nevedia pracovať s počítačom, bude sa im ťažko prechádzať do iných programovacích jazykov. V našom prostredí síce budú musieť ovládať základnú prácu s počítačom alebo sa ju naučiť, ale keď sa ju raz naučia, budú oveľa flexibilnejší a bude pre nich jednoduchšie prejsť na iné programovacie jazyky.

\begin{figure}[H]
\centering
\includegraphics[width=13cm]{codejumper}
\caption{Prostredie Code Jumper}
\vspace{1cm}
\end{figure}

\subsection{Alan2}
Alan2 \cite{Alan2} je zvukové programovacie prostredie pre nevidiacich žiakov nižšieho sekundárneho vzdelávania, ktoré ako svoju diplomovú prácu vytvoril Matúš Kováč. Prostredie má slúžiť pri výučbe informatiky na rozvoj algoritmického myslenia. 
Výsledná aplikácia (obrázok 1.3) je jednoduchá a ľahko sa v nej zorientujeme. Je možné ju ovládať iba pomocou klávesnice. Hlavnou časťou je textové pole, do ktorého píšu používatelia program a ten vedia následne spustiť. 
\newline
Jazyk prostredia je navrhnutý po slovensky s intuitívnymi príkazmi. Dva základné príkazy jazyka sú prehratie zvuku a povedanie textu. Ďalej sú v jazyku príkazy cyklu, vetvenia, podmienok, podprogramu aj priradenia. Výstupom programu je postupnosť zvukov, vzniknutá zo vstupného kódu. 
\newline
Nedostatkom aplikácie je, že kontextová ponuka predikovaných príkazov nespolupracuje s čítačom obrazovky. Takže hoci sa kontextová ponuka zobrazí, nevidiaci žiak sa o nej nikdy nedozvie, pretože ju čítač neprečíta. Vhodným vylepšením by bolo, keby pri implementácii príkazu povedz() čítal text čítač obrazovky a nie syntetizér textu eSpeak, pretože používa iný, menej prirodzený a ťažšie zrozumiteľný hlas ako čítač, z čoho môžu byť žiaci zmätení. Ďalším nedostatkom je, že eSpeak nečíta správne niektoré písmená s interpunkciou. 
\newline
Týmto nedostatkom sa v našom prostredí pokúsime vyhnúť a syntax nášho jazyka bude o čosi jednoduchšia. Výrazným rozdielom bude, že eliminujeme zátvorky, aby sme sa vyhli zbytočným chybám v konštrukcii príkazov, ktoré by mohli nevidiaci kvôli zátvorkám spraviť.


\begin{figure}[H]
\centering
\includegraphics[width=16cm]{alan2}
\caption{Prostredie Alan2}
\vspace{1cm}
\end{figure}

\section{Použité technológie}
V tejto časti sa pozrieme na technológie, ktoré sme zvolili na vývoj našej aplikácie a taktiež na tie, ktoré sme museli použiť z dôvodu vývoja softvéru pre nevidiacich.

\subsection{Vývojové nástroje}

\subsubsection{Java}
Java je objektovo orientovaný programovací jazyk. Zdrojové kódy sa nekompilujú do strojového kódu, ale do byte-code, ktorý nie je závislý od konkrétnej platformy. Byte-code spracováva interpreter - Java Virtual Machine. Java je jeden z najpopulánejších programovacích jazykov, pretože funguje na rôznych platformách(Windows, Mac, Linux,...).
\newline
Použitie Javy pre našu aplikáciu sme zvolili z dôvodu dobrej kompatibility s čítačom obrazovky. 

\subsubsection{JavaFX}
JavaFX je knižnica pre programovací jazyk Java na vytváranie bohatých desktopových a webových aplikácií, ktoré môžu bežať konzistentne na viacerých platformách. Obsahuje množstvo grafických a mediálnych API. Aplikácie vyvinuté pomocou JavaFX môžu bežať na rôznych zariadeniach, ako sú počítače, mobilné telefóny, tablet, televízory atď. JavaFX obsahuje všetky funkcie, na ktoré potrebovali predtým programátori rôzne knižnice a má plnú podporu Accessibility API.


\subsubsection{IntelliJ IDEA}
IntelliJ IDEA \cite{IntelliJ} je integrované vývojové prostredie od firmy JetBrains pre jazyky JVM, ako sú Java, Kotlin, Scala či Groovy, navrhnuté tak, aby maximalizovalo produktivitu vývojárov. Je to multiplatformové IDE, ktoré poskytuje konzistentné skúsenosti v systémoch Windows, MacOS a Linux. Prostredie poskytuje šikovné dokončovanie kódu, statickú analýzu kódu a refraktorovanie.

\subsection{Technológie pre nevidiacich}

\subsubsection{Čítač obrazovky NVDA}
Čítač obrazovky NVDA(NonVisual Desktop Access) \cite{NVDA} je voľne dostupný čítač obrazovky pre operačný systém Windows. Má otvorený zdrojový kód, čo umožňuje prekladateľom a vývojárom na celom svete neustále prispievať k jeho rozširovaniu a zlepšovať tento softvér. NVDA je preložený do viac ako 55 jazykov a používajú ho ľudia vo vyše 175 krajinách. 
\newline
Tento softvér vytvorili dvaja nevidiaci programátori, aby sprístupnili prácu s počítačom miliónom nevidiacich ľudí, pre ktorých bol Braillov displej finančne neprístupný. Týmto ľudom ulahčili prístup k vzdelaniu a zamestnaniu, nehovoriac o každodenných funkciách, ako je online bankovníctvo, nakupovaie či posielanie správ. 
\newline
Okrem všeobecných funkcíí vo Windowse, NVDA pracuje so softvérmi Microsoft, WordPad, NotePad, Windows Media Player, s prehliadačmi Google Chrome, Mozilla Firefox, Internet Explorer a Microsoft Edge. Taktiež podporuje Outlook a väčšinu funkcií Microsoft Word, Excel a PowerPoint. Niektoré ďalšie kancelárske balíky sú podporované prostredníctvom Java Access Bridge.

\subsubsection{Java Accessibility API}
Java Accessibility API \cite{JAAPI} je rozhranie, ktoré umožňuje vytvárať aplikácie písané v jazyku Java, ktoré sú prístupné osobám so zdravotným postihnutím. Aplikácie sú kompatibilné s asistenčnými technológiami, ako sú čítačky obrazovky, zväčšovacie obrazovky, systémy rozpoznávania reči a obnoviteľné Braillovo písmo. Java Accessibility API sprístupňuje informácie o komponentoch grafického používateľského rozhrania asistenčným technológiám a poskytuje používateľom alternatívnu prezentáciu a ovládanie aplikácií v Jave. 

\subsubsection{Java Access Bridge}
Java Access Bridge \cite{JAB} je technológia, ktorá umožňuje aplikáciám Java a appletom, ktoré implementujú rozhrania Java Accessibility API, zviditeľniť asistenčné technológie v systémoch Microsoft Windows. API je súčasťou Java Accessibility Utilities, čo je sada pomocných tried ktoré pomáhajú asistenčným technológiám poskytovať prístup k súpravám nástrojov používateľského rozhrania, ktoré implementujú Java Accessibility API.
\newline
Po spustení v systéme Microsoft Windows komunikuje aplikácia s knižnicami DLL Java Accsess Bridge, ktoré komunikujú prostredníctvom knižníc Java Access Bridge s Java Virtual Machine. Tieto knižnice komunikujú s Java Accessibility Utilities, ktoré zhromažďujú informácie o tom, čo sa deje v aplikácii a preposiela ich čítačke obrazovky cez Java Access Bridge.


\section{Kompilátory a interpretre}
Keďže vytvárame prostredie s vlastným programovacím jazykom, dôležitou otázkou je, aký spôsob spracovania vstupného kódu v našom jazyku si zvolíme. 
\newline
Najskôr sa pozrieme, na spôsoby, ktoré môžme zvoliť a potom si vyberieme, akým spôsobom budeme postupovať v našom programe.

\subsection{Kompilátor}
Programátori píšu kód vo vysokoúrovňovom jazyku, pretože je bližší ľudskej reči, ľahšie sa v ňom uvažuje o problémoch a jeho zdrojový kód je kratší. 
Kompilátor \cite{Compilers} prekladá program napísaný vo vysokoúrovňovom programovacom jazyku, do nízkoúrovňového strojového kódu. Počas tohto procesu zároveň odhaľuje a nahlasuje chyby v zdrojovom kóde. 
\newline
Keďže je vývoj kompilátora zložitá úloha, je dobré si prácu štruktúrovať  a kompiláciu rozdeliť na niekoľko fáz. Fázy majú isté usporiadanie, ale v niektorých kompilátoroch sa môže ich poradie líšiť, môžu byť kombinované alebo rozdelené medzi iné fázy, alebo môže byť pridaná ďalšia fáza.
\newline
Základné fázy kompilátora a ich poradie:
\begin{itemize}
\item \textbf{Lexikálna analýza - }lexikálny analyzátor dostane ako vstup postupnosť znakov (zdrojový kód) a odfiltrovaním medzier, nových riadkov atď. rozdelí reťazec na tokeny. Tokeny sú názvy premenných, čísla, kľúčové slová a pod. Cieľom lexikálnej analýzy je uľahčiť prácu syntaktickej analýze. 
\item \textbf{Syntaktická analýza - } ako vstup dostane zoznam tokenov, vytvorený lexikálnou analýzou a usporiada ich do syntaktického stromu, ktorý zobrazuje štruktúru programu.
\item \textbf{Kontrola typu - }v tejto fáze sa analyzuje syntaktický strom. Zisťuje sa, či program neporušuje syntax jazyka. Napríklad, či bola použitá premenná deklarovaná a či je použitá v správnom kontexte. 
\item \textbf{Generovanie prechodného kódu - }genrátor preloží program do jednoduchého a strojovo nezávislého prechodného kódu. Výhodou je, že ak kompilátor potrebuje vygenerovať kód pre niekoľko strojových architektúr, je potrebný iba jeden preklad do prechodného kódu. 
\item \textbf{Pridelenie registra - }symbolické názvy premenných v prechodnom kóde sa preložia na čísla, z ktorých každé zodpovedá registru v cieľovom strojovom kóde.
\item \textbf{Generovanie strojového kódu - }generátor preloží prechodný kód do strojového kódu pre špecifickú architektúru daného zariadenia.
\item \textbf{Skladanie - }strojový kód je preložený do binárnej reprezentácie.
\end{itemize}
 

\subsection{Interpreter}
Interpreter \cite{Compilers} je ďalší spôsob implementácie programovacieho jazyka, ktorý zdieľa mnoho aspektov s kompilátorom. Lexikálna analýza a kontrola typov sú rovnaké ako pri kompilovaní, ale miesto generovania kódu zo syntaktického stromu sa pracuje priamo na vyhodnotení výrazov a vykonávaní príkazov. 
\newline
Interpreter môže v niektorých prípadoch spracovať časť syntaktického stromu viac krát (napr. telo cyklu), preto je poväčšine interpretácia v porovnaní s kompiláciou pomalšia. Výhodou je, že programovanie interpretra je jednoduchšie ako programovanie kompilátora, preto sa v používa v aplikáciách, kde nie je podstatná rýchlosť častejšie. 
\newline
\newline
Kompilátor a interpreter sa taktiež môžu pri vývoji aplikácií kombinovať. Kompiláor vytvorí prechodný kód a namiesto generovania strojového kódu sa prechodný kód interpretuje. Existujú aj programy, v ktorých sa niektoré časti kompilujú do strojového kódu, iné časti do prechodného kódu, ktorý sa následne interpretuje a  zvyšné časti syntaktického stromu sa priamo interpretujú.
\newline
\newline
V našej aplikácii bude vzhľadom na požiadavky jazyka postačujúce spracovanie zdrojového kódu interpretrom.